package com.parktech.sun.domain.service;

import com.parktech.sun.domain.model.sunhz.Industry;
import com.parktech.sun.domain.repository.BaseRepository;

import java.util.List;

/**
 * Created by IntelliJ IDEA.
 * User: Administrator
 * Date: 11-1-8
 * Time: 下午9:38
 * To change this template use File | Settings | File Templates.
 */
public interface BaseService<T> {

//    public BaseRepository<T> getBaseRepository() ;


    T getById(Long id);

    /**
     * 所有模块都可调用的公共分页显示方法，获取满足模糊条件的对象的总数目
     *
     * @param clz
     * @param fieldColumns
     * @param searchValues
     * @return
     */
    public Integer getTotalSizeWithSimilarCondition(Class clz, List fieldColumns, List searchValues);

    /**
     * 所有模块都可调用的公共分页显示方法，获取满足模糊条件的当前分页的对象列表
     * getPaginationObjectsWithSimilarCondition(class,1,20,list['a','b'],lit['avalue','bvlaue'],string["asc","desc"],string[fiede,field])
     *
     * @param clz          对象类
     * @param pageIndex    当前页
     * @param pageSize     每页数目
     * @param fieldColumns 类的属性数组
     * @param searchValues 类的属性数组对应的值数组
     * @param sortSchemas  每个排序的健数组对应的升降序规则：即ASC,DESC 数组
     * @param sortKeys     排序的健数组
     * @return
     */
    public List<T> getPaginationObjectsWithSimilarCondition(Class clz, final int pageIndex, final int pageSize, List fieldColumns, List searchValues, String[] sortSchemas, String[] sortKeys);


    public List<T> getPaginationObjectsWithSimilarConditionContainCompare(T clz, final int pageIndex, final int pageSize, List fieldColumns, List searchValues,String[] compareColumns, String[] compareDirections, Object[] compareValues,String[] sortSchemas, String[] sortKeys);

    /**
     * 新建或更新对象
     *
     * @param bean
     */
    void saveOrUpdateBean(T bean);

   // void update(T bean);

    void clearThenSaveOrUpdateBean(T bean);

    /**
     * 逻辑删除对象
     *
     * @param id
     */
    void removeBeanByLogic(Long id);

    /**
     * 物理删除对象
     *
     * @param id
     */
    void removeBean(Long id);

    public T getBeanByID(Long id);

    void deleteAll(Long[] ids);

    void deleteAll(Class clazz, Long[] ids);

    T merge(T t);
}
